iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0
自我挑戰組

自我挑戰Ruby系列 第 23

Day 23 - 區塊1

  • 分享至 

  • xImage
  •  

什麼是區塊

區塊(Block)主要是以大括號 { } 或 do…end的形式呈現。

在Ruby的世界裡,區塊(Block)並不是一個物件,

所以區塊不能單獨使用,也不能藉由變數指定給他,

而區塊也不是參數。如果硬要寫的話會使語法錯誤,例如:

{puts "Arance"} 或 name = {Arance} 或是

do 

    puts "Arance"

end

差異

那究竟使用大括號 { } 以及 do…end的差異是什麼呢?

(1)程式碼行數:

如果可以以一行來將程式碼完成時,我們會使用大括號 { };

而如果需要寫至一行以上時(例如遇上比較複雜的判斷時),我們則會使用 do…end。

(2)優先順序:

大括號 { } 優先順序會大於 do…end

例如:

arr = [1, 2, 3]

p arr.map { |x| x+1 } 會得到 [2, 3, 4]

p arr.map do |x| x+1 end 只會得到 [1, 2, 3]

因為優先順序較低的關係,

在這個地方印出東西會先跟陣列先結合,

後面的Block就不會先被處理。

參數傳入Block

arr = [1, 2, 3]
arr.map { |i| i +1 }

arr.map do |i|
 p i+1
end

在Block中以兩個Vertical Bar (|)包住的變數i,

只會在Block內才會有效,如果額外在Block外又以puts i 寫這條程式碼,

會因為找不到這個變數i而出現出錯訊息。

Day 23 結語

最主要Block中的變數其實就像我們在使用yield(讓)方法,

將目前的控制權轉給Block,而把值帶入Block裡面,

究竟什麼事yield(讓)方法,為何我們需要了解呢?

因為Block不一定能執行,

但我們如果使用yield就一定會執行,會在下一篇介紹yield方法。


上一篇
Day 22 - 方法2
下一篇
Day 24 - 區塊2
系列文
自我挑戰Ruby30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言